package model.rotations;

import model.cubos.CuboMagico;

/**
 * Referente ao movimento Y da apostila sobre o cubo magico.
 * 
 * @author Luiz
 * 
 */
public class RotacaoCuboInteiroComBaseNaCamadaSuperior extends Rotacao {

	public RotacaoCuboInteiroComBaseNaCamadaSuperior() {
		super();
	}

	public RotacaoCuboInteiroComBaseNaCamadaSuperior(int numeroDeRotacoes,
			boolean isSentidoHorario) {
		super(numeroDeRotacoes, isSentidoHorario);
	}

	private void rotacionarCuboInteiroComBaseNaCamadaSuperiorSentidoHorario(
			CuboMagico cubo) {
		Rotacao rotacionarCuboMeioEntreSuperiorInferiorSentidoAntiHorario = new RotacaoCuboInteiroComBaseNaCamadaEntreSuperiorInferior(
				1, false);
		rotacionarCuboMeioEntreSuperiorInferiorSentidoAntiHorario
				.rotacionar(cubo);

		Rotacao rotacionarCuboCamadaInferiorSentidoAntiHorario = new RotacaoCamadaInferior(
				1, false);
		rotacionarCuboCamadaInferiorSentidoAntiHorario.rotacionar(cubo);

		Rotacao rotacionarCuboCamadaSuperior = new RotacaoCamadaSuperior(1,
				true);
		rotacionarCuboCamadaSuperior.rotacionar(cubo);
	}

	private void rotacionarCuboInteiroComBaseNaCamadaSuperiorSentidoAntiHorario(
			CuboMagico cubo) {
		for (int i = 0; i < 3; i++)
			rotacionarCuboInteiroComBaseNaCamadaSuperiorSentidoHorario(cubo);
	}

	@Override
	public void rotacionar(CuboMagico cubo) {
		if (isSentidoHorario)
			for (int i = 0; i < this.getNumeroDeRotacoes(); i++)
				rotacionarCuboInteiroComBaseNaCamadaSuperiorSentidoHorario(cubo);
		else
			for (int j = 0; j < this.getNumeroDeRotacoes(); j++)
				rotacionarCuboInteiroComBaseNaCamadaSuperiorSentidoAntiHorario(cubo);
	}

}
